package main

import "fmt"

func f2() (x int) {
	defer func() {
		x++
	}()
	return 5
}

func f4() (x int) {
	defer func(x int) {
		x++
	}(x)
	return 5
}

func main() {
	/*
		在Go语言函数中，return 语句在底层并不是原子操作，它分为返回值赋值和 RET 指令两步。
		而 defer 语句执行的时机就在返回值赋值操作后，RET指令执行前。

		函数中 return 语句底层实现：
							返回值 = x
		return x	➪			↓
							 RET 指令

		defer语句执行的时机：
							返回值 = x
								↓
		return x	➪		运行 defer
								↓
							 RET 指令


	*/
	fmt.Println(f2())
	fmt.Println(f4())
	/*
		6
		5
	*/
}
